home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 November / PCWorld_2006-11_cd.bin / domacnost a kancelar / findgraph / fgraph.exe / {app} / TestApprVB / Form1.frm < prev    next >
Text File  |  2006-05-23  |  25KB  |  869 lines

  1. VERSION 5.00
  2. Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
  3. Begin VB.Form Form1 
  4.    Caption         =   "FindGraph automation, Fitting"
  5.    ClientHeight    =   6840
  6.    ClientLeft      =   7365
  7.    ClientTop       =   345
  8.    ClientWidth     =   6420
  9.    LinkTopic       =   "Form1"
  10.    ScaleHeight     =   6840
  11.    ScaleWidth      =   6420
  12.    Begin VB.CommandButton BSpline 
  13.       Caption         =   "B-Spline"
  14.       Height          =   495
  15.       Left            =   4920
  16.       Picture         =   "Form1.frx":0000
  17.       Style           =   1  'Graphical
  18.       TabIndex        =   14
  19.       ToolTipText     =   "Nonlinear models"
  20.       Top             =   5760
  21.       Width           =   1455
  22.    End
  23.    Begin VB.CommandButton Regression 
  24.       Caption         =   "Regression"
  25.       Height          =   495
  26.       Left            =   4920
  27.       Picture         =   "Form1.frx":05E2
  28.       Style           =   1  'Graphical
  29.       TabIndex        =   13
  30.       ToolTipText     =   "Nonlinear models"
  31.       Top             =   5160
  32.       Width           =   1455
  33.    End
  34.    Begin VB.CommandButton User 
  35.       Caption         =   "User"
  36.       Height          =   495
  37.       Left            =   4920
  38.       Picture         =   "Form1.frx":0BC4
  39.       Style           =   1  'Graphical
  40.       TabIndex        =   10
  41.       ToolTipText     =   "User defined DLL"
  42.       Top             =   4545
  43.       Width           =   1455
  44.    End
  45.    Begin VB.CommandButton Curve 
  46.       Caption         =   "Piece"
  47.       Height          =   495
  48.       Left            =   4920
  49.       Picture         =   "Form1.frx":11A6
  50.       Style           =   1  'Graphical
  51.       TabIndex        =   9
  52.       ToolTipText     =   "Piece Linear"
  53.       Top             =   1475
  54.       Width           =   1455
  55.    End
  56.    Begin VB.CommandButton Nonlinear 
  57.       Caption         =   "Nonlinear"
  58.       Height          =   495
  59.       Left            =   4920
  60.       Picture         =   "Form1.frx":1788
  61.       Style           =   1  'Graphical
  62.       TabIndex        =   8
  63.       ToolTipText     =   "Nonlinear models"
  64.       Top             =   3931
  65.       Width           =   1455
  66.    End
  67.    Begin VB.CommandButton Neural 
  68.       Caption         =   "Neural"
  69.       Height          =   495
  70.       Left            =   4920
  71.       Picture         =   "Form1.frx":1D6A
  72.       Style           =   1  'Graphical
  73.       TabIndex        =   7
  74.       ToolTipText     =   "Neural network approximation"
  75.       Top             =   3317
  76.       Width           =   1455
  77.    End
  78.    Begin VB.CommandButton Fourie 
  79.       Caption         =   "Fourie"
  80.       Height          =   495
  81.       Left            =   4920
  82.       Picture         =   "Form1.frx":234C
  83.       Style           =   1  'Graphical
  84.       TabIndex        =   6
  85.       ToolTipText     =   "Fourie line"
  86.       Top             =   2703
  87.       Width           =   1455
  88.    End
  89.    Begin VB.CommandButton Logistic 
  90.       Caption         =   "Logistic"
  91.       Height          =   495
  92.       Left            =   4920
  93.       Picture         =   "Form1.frx":292E
  94.       Style           =   1  'Graphical
  95.       TabIndex        =   5
  96.       ToolTipText     =   "Logistic model"
  97.       Top             =   2089
  98.       Width           =   1455
  99.    End
  100.    Begin VB.CommandButton Polynomial 
  101.       Caption         =   "Polynomial"
  102.       Height          =   516
  103.       Left            =   4920
  104.       Picture         =   "Form1.frx":2F10
  105.       Style           =   1  'Graphical
  106.       TabIndex        =   0
  107.       ToolTipText     =   "Fit regression line"
  108.       Top             =   840
  109.       Width           =   1452
  110.    End
  111.    Begin MSComctlLib.ListView ListView1 
  112.       Height          =   1215
  113.       Left            =   240
  114.       TabIndex        =   1
  115.       Top             =   4920
  116.       Width           =   4575
  117.       _ExtentX        =   8070
  118.       _ExtentY        =   2143
  119.       View            =   3
  120.       LabelWrap       =   -1  'True
  121.       HideSelection   =   -1  'True
  122.       _Version        =   393217
  123.       ForeColor       =   -2147483640
  124.       BackColor       =   -2147483643
  125.       BorderStyle     =   1
  126.       Appearance      =   1
  127.       NumItems        =   0
  128.    End
  129.    Begin MSComctlLib.ListView ListView2 
  130.       Height          =   3975
  131.       Left            =   240
  132.       TabIndex        =   11
  133.       Top             =   840
  134.       Width           =   4575
  135.       _ExtentX        =   8070
  136.       _ExtentY        =   7011
  137.       View            =   3
  138.       LabelWrap       =   -1  'True
  139.       HideSelection   =   -1  'True
  140.       _Version        =   393217
  141.       ForeColor       =   -2147483640
  142.       BackColor       =   -2147483643
  143.       BorderStyle     =   1
  144.       Appearance      =   1
  145.       NumItems        =   0
  146.    End
  147.    Begin VB.Label ErrInf 
  148.       Caption         =   "1"
  149.       Height          =   375
  150.       Left            =   4920
  151.       TabIndex        =   12
  152.       Top             =   6240
  153.       Width           =   1335
  154.    End
  155.    Begin VB.Label FunctionName 
  156.       Height          =   615
  157.       Left            =   120
  158.       TabIndex        =   4
  159.       Top             =   120
  160.       Width           =   6255
  161.       WordWrap        =   -1  'True
  162.    End
  163.    Begin VB.Label Deviation 
  164.       Caption         =   "0.0001"
  165.       BeginProperty Font 
  166.          Name            =   "MS Sans Serif"
  167.          Size            =   8.25
  168.          Charset         =   204
  169.          Weight          =   700
  170.          Underline       =   0   'False
  171.          Italic          =   0   'False
  172.          Strikethrough   =   0   'False
  173.       EndProperty
  174.       Height          =   255
  175.       Left            =   1200
  176.       TabIndex        =   3
  177.       Top             =   6240
  178.       Width           =   3495
  179.    End
  180.    Begin VB.Label Label1 
  181.       Caption         =   "Deviation"
  182.       Height          =   255
  183.       Left            =   120
  184.       TabIndex        =   2
  185.       Top             =   6240
  186.       Width           =   855
  187.    End
  188. End
  189. Attribute VB_Name = "Form1"
  190. Attribute VB_GlobalNameSpace = False
  191. Attribute VB_Creatable = False
  192. Attribute VB_PredeclaredId = True
  193. Attribute VB_Exposed = False
  194. Private Declare Function GetModuleFileName Lib "kernel32" _
  195.          Alias "GetModuleFileNameA" _
  196.          (ByVal hModule As Long, _
  197.          ByVal lpFileName As String, _
  198.          ByVal nSize As Long) As Long
  199.  
  200. Dim FindGraph As Object
  201.  
  202. Sub LogError()
  203.     'Print "error " & Err.Description
  204.     ErrInf.Caption = Err.Description
  205.  
  206. End Sub
  207.  
  208.  
  209.  
  210. Private Sub Command1_Click()
  211.  
  212. End Sub
  213.  
  214. Private Sub Form_Load()
  215.     On Error GoTo ErrHandler
  216.     ' Create object FindGraph
  217.     Set FindGraph = CreateObject("FindGraph.Document")
  218.     ' Run program FindGraph in new window
  219.     FindGraph.AppInit (1) ' 1 - visible, 0 - hiddden
  220.     
  221.     Exit Sub
  222. ErrHandler:
  223.     LogError
  224.     Exit Sub
  225. End Sub
  226.  
  227. Private Sub Form_Unload(Cancel As Integer)
  228.     On Error GoTo ErrHandler
  229.     ' Close FindGraph application
  230.     FindGraph.AppQuit
  231. ErrHandler:
  232.     Set FindGraph = Nothing
  233. End Sub
  234.  
  235.  
  236. Private Sub ListInit()
  237.     ListView1.ListItems.Clear
  238.     nw1 = ListView1.Width / 5
  239.     nw2 = ListView1.Width * 3 / 4
  240.     ListView1.ColumnHeaders.Add , , " ", nw1
  241.     ListView1.ColumnHeaders.Add , , "Coeff", nw2
  242.        
  243.     
  244. '    Dim Col As ColumnHeader ' Declare variable
  245.  '   Set Col = ListView1.ColumnHeaders.Add , , " ", ListView1.Width / 5
  246.   '  Set Col = ListView1.ColumnHeaders.Add , , "Coeff", ListView1.Width * 3 / 4
  247. End Sub
  248.  
  249. Private Sub ListAdd(i, Coef)
  250.     Dim Insert As ListItem
  251.     Set Insert = ListView1.ListItems.Add(, , CStr(i))
  252.     Insert.SubItems(1) = CStr(Coef)
  253. End Sub
  254.  
  255. Private Sub ShowResults()
  256.     FunctionName.Caption = FindGraph.FuncApprString
  257.     NGet = FindGraph.ApprParamsNumber
  258.     Deviation.Caption = FindGraph.GetApprParam(NGet - 1)
  259.     ' Print "ub"; UBound(vaCoef)
  260.     ' Fill the grid with coefficients
  261.     ListInit
  262.     Dim fCoef As Double
  263.     For i = 1 To NGet - 1
  264.         fCoef = FindGraph.GetApprParam(i - 1)
  265.         ListAdd i, fCoef
  266.     Next i
  267. End Sub
  268.  
  269. Private Sub ShowResultsVariant()
  270.     FunctionName.Caption = FindGraph.FuncApprString
  271.     Dim vaCoef As Variant
  272.     vaCoef = FindGraph.ArrayParams
  273.     NGet = UBound(vaCoef)
  274.     Deviation.Caption = vaCoef(NGet - 1)
  275.     ' Print "ub"; UBound(vaCoef)
  276.     ' Fill the grid with coefficients
  277.     ListInit
  278.     Dim fCoef As Double
  279.     For i = 1 To NGet - 1
  280.         fCoef = vaCoef(i - 1)
  281.         ListAdd i, fCoef
  282.     Next i
  283. End Sub
  284.  
  285.   
  286. Private Sub List2Init()
  287.     ListView2.ListItems.Clear
  288.     Dim Col As ColumnHeader ' Declare variable
  289.     Set Col = ListView2.ColumnHeaders.Add(, , " ", ListView1.Width / 6)
  290.     Set Col = ListView2.ColumnHeaders.Add(, , "X", ListView1.Width / 4)
  291.     Set Col = ListView2.ColumnHeaders.Add(, , "Y", ListView1.Width / 4)
  292.     Set Col = ListView2.ColumnHeaders.Add(, , "Yappr", ListView1.Width / 4)
  293. End Sub
  294.  
  295. Private Sub List2Add(i, x, y0, y1)
  296.     Dim Insert As ListItem
  297.     Set Insert = ListView2.ListItems.Add(, , CStr(i))
  298.     Insert.SubItems(1) = CStr(x)
  299.     Insert.SubItems(2) = CStr(y0)
  300.     Insert.SubItems(3) = CStr(y1)
  301. End Sub
  302.  
  303. Private Sub ShowDataVals(dwId, N, vaDots)
  304.     ' Fill the grid with Data
  305.     List2Init
  306.     Dim x, y0, y1 As Double
  307.     For i = 1 To N
  308.         it = (i - 1) * 3
  309.         x = vaDots(it)
  310.         y0 = vaDots(it + 1)
  311.         'y1 = vaDots(it + 2)
  312. ' You can calculate value
  313.         y1 = FindGraph.FuncApprInPoint(dwId, x)
  314.         List2Add i, x, y0, y1
  315.     Next i
  316. End Sub
  317.  
  318. Private Sub ShowData(dwId)
  319.     Dim vaDots As Variant
  320.     vaDots = FindGraph.ArrayVar
  321.     NGet = UBound(vaDots)
  322.     'Print "ub"; UBound(vaDots)
  323.     ' Fill the grid with Data
  324.     List2Init
  325.     N = NGet / 3
  326.     Dim x, y0, y1 As Double
  327.     For i = 1 To N
  328.         it = (i - 1) * 3
  329.         x = vaDots(it)
  330.         y0 = vaDots(it + 1)
  331. ' FindGraph fills vaDots column Z with calculated values
  332.         y1 = vaDots(it + 2)
  333. ' Alternatively you can calculate value
  334. '       y1 = FindGraph.FuncApprInPoint(dwId, x)
  335.         List2Add i, x, y0, y1
  336.     Next i
  337. End Sub
  338.  
  339.  
  340. ' The examples show how to fit data
  341. ' Create new function named "Polynomial"
  342. Private Sub Polynomial_Click()
  343.     On Error GoTo ErrHandler
  344.     Dim dwDots, dwFunc, it, N As Long
  345.     Dim nIdFunc As Long
  346.     Dim fX, fY, fZ As Double
  347.     
  348.     N = 100
  349.     Dim vaDots(300) As Variant
  350.     
  351.     ' Create new series of points
  352.     dwDots = FindGraph.DotsNew(1, 2, 20, 1, "Polynomial")
  353.     
  354.     ' Weighting
  355.     ' 0 No weight, Wi = 1
  356.     ' 1 Statistical, Wi = 1/Yi
  357.     ' 2 Statistical, Wi = Yi
  358.     ' 3 Statistical, Wi = 1/Xi
  359.     ' 4 Statistical, Wi = Xi
  360.     ' 5 Instrumental, Wi = 1/Zi^2
  361.     ' 6 Direct, Wi = Zi
  362.     FindGraph.Weighting = 0
  363.     
  364.     ' Set the identifier of a series
  365.     FindGraph.ArrayId = dwDots
  366.     ' Fill array with points
  367.     For i = 1 To N
  368.         fX = CDbl(8# / N * i)
  369.         fY = CDbl(4# + 3 * Sin(3 / N * i))
  370.         fZ = CDbl(i)
  371.         it = (i - 1) * 3
  372.         vaDots(it) = fX
  373.         vaDots(it + 1) = fY
  374.         vaDots(it + 2) = fZ
  375.     Next i
  376.     
  377.     ' Add all array at once
  378.     FindGraph.ArrayVar = vaDots
  379.     
  380.     ' Approximation
  381.     nIdFunc = 0 'Polynomial
  382.     Dim vaParams(10) As Variant ' parameters for automation approximation
  383.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  384.     vaParams(1) = CDbl(3) ' nOrder for regression line or 0
  385.     
  386.     FindGraph.FuncApprStart (nIdFunc)
  387.     FindGraph.ArrayVar = vaDots
  388.     FindGraph.ArrayParams = vaParams
  389.     dwFunc = FindGraph.FuncApprCreate(3, 10, "Polynomial")
  390.     
  391.     
  392.     ShowDataVals dwFunc, N, vaDots
  393.   '  ShowData (dwFunc)
  394.     ShowResults
  395.     ErrInf.Caption = "Done"
  396.     
  397.     FindGraph.FuncApprEnd
  398.  
  399.     Exit Sub
  400. ErrHandler:
  401.     LogError
  402.     Exit Sub
  403. End Sub
  404.  
  405. Private Sub Logistic_Click()
  406.     On Error GoTo ErrHandler
  407.     Dim dwDots, dwFunc, it, N As Long
  408.     Dim nIdFunc As Long
  409.     Dim fX, fY, fZ As Double
  410.     
  411.     N = 100
  412.     Dim vaDots(300) As Variant
  413.     
  414.     ' Create new series of points
  415.     dwDots = FindGraph.DotsNew(2, 2, 20, 1, "Logistic")
  416.     ' Set the identifier of a series
  417.     FindGraph.ArrayId = dwDots
  418.     ' Fill array with points
  419.     For i = 1 To N
  420.         fX = CDbl(8# / N * i)
  421.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  422.         fZ = CDbl(i)
  423.         it = (i - 1) * 3
  424.         vaDots(it) = fX
  425.         vaDots(it + 1) = fY
  426.         vaDots(it + 2) = fZ
  427.     Next i
  428.  
  429.     ' Add all array at once
  430.     FindGraph.ArrayVar = vaDots
  431.     
  432.     ' Approximation
  433.     nIdFunc = 50 'Logistic
  434.     Dim vaParams(10) As Variant ' parameters for automation approximation
  435.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  436.     vaParams(1) = CDbl(3) ' nOrder for regression line or 0
  437.     
  438.     FindGraph.FuncApprStart (nIdFunc)
  439.     FindGraph.ArrayVar = vaDots
  440.     FindGraph.ArrayParams = vaParams
  441.     dwFunc = FindGraph.FuncApprCreate(3, 10, "Logistic")
  442.     
  443.     ShowDataVals dwFunc, N, vaDots
  444.     ShowResults
  445.     
  446.     FindGraph.FuncApprEnd
  447.  
  448.     Exit Sub
  449. ErrHandler:
  450.     LogError
  451.     Exit Sub
  452. End Sub
  453.  
  454. Private Sub Fourie_Click()
  455.     On Error GoTo ErrHandler
  456.     Dim dwDots, dwFunc, it, N As Long
  457.     Dim nIdFunc As Long
  458.     Dim fX, fY, fZ As Double
  459.     
  460.     N = 100
  461.     Dim vaDots(300) As Variant
  462.     
  463.     ' Create new series of points
  464.     dwDots = FindGraph.DotsNew(3, 2, 20, 1, "Fourie")
  465.     ' Set the identifier of a series
  466.     FindGraph.ArrayId = dwDots
  467.     ' Fill array with points
  468.     For i = 1 To N
  469.         fX = CDbl(8# / N * i)
  470.         fY = CDbl(4# + 3 * Sin(10 / N * i))
  471.         fZ = CDbl(i)
  472.         it = (i - 1) * 3
  473.         vaDots(it) = fX
  474.         vaDots(it + 1) = fY
  475.         vaDots(it + 2) = fZ
  476.     Next i
  477.  
  478.     ' Add all array at once
  479.     FindGraph.ArrayVar = vaDots
  480.     
  481.     ' Approximation
  482.     nIdFunc = 60 'Fourie
  483.     Dim vaParams(10) As Variant ' parameters for automation approximation
  484.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  485.     vaParams(1) = CDbl(3) ' number of harmonics
  486.     
  487.     FindGraph.FuncApprStart (nIdFunc)
  488.     FindGraph.ArrayVar = vaDots
  489.     FindGraph.ArrayParams = vaParams
  490.     dwFunc = FindGraph.FuncApprCreate(3, 10, "Fourie")
  491.     
  492.     ShowDataVals dwFunc, N, vaDots
  493.     ShowResults
  494.     
  495.     FindGraph.FuncApprEnd
  496.  
  497.     Exit Sub
  498. ErrHandler:
  499.     LogError
  500.     Exit Sub
  501.  
  502. End Sub
  503. 'Piece linear
  504. Private Sub Curve_Click()
  505.     On Error GoTo ErrHandler
  506.     Dim dwDots, dwFunc, it, N As Long
  507.     Dim nIdFunc As Long
  508.     Dim fX, fY, fZ As Double
  509.     
  510.     N = 100
  511.     Dim vaDots(300) As Variant
  512.     
  513.     ' Create new series of points
  514.     dwDots = FindGraph.DotsNew(3, 2, 20, 1, "Piece linear")
  515.     ' Set the identifier of a series
  516.     FindGraph.ArrayId = dwDots
  517.     ' Fill array with points
  518.     For i = 1 To N
  519.         fX = CDbl(8# / N * i)
  520.         fY = CDbl(4# + 3 * Sin(10 / N * i))
  521.         fZ = CDbl(i)
  522.         it = (i - 1) * 3
  523.         vaDots(it) = fX
  524.         vaDots(it + 1) = fY
  525.         vaDots(it + 2) = fZ
  526.     Next i
  527.  
  528.     ' Add all array at once
  529.     FindGraph.ArrayVar = vaDots
  530.     
  531.     ' Approximation
  532.     nIdFunc = 20 'Fourie
  533.     Dim vaParams(10) As Variant ' parameters for automation approximation
  534.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  535.     vaParams(1) = CDbl(20) ' Number of steps
  536.     vaParams(2) = CDbl(0) ' If 1 - lines on centers of steps
  537.     
  538.     FindGraph.FuncApprStart (nIdFunc)
  539.     FindGraph.ArrayVar = vaDots
  540.     FindGraph.ArrayParams = vaParams
  541.     dwFunc = FindGraph.FuncApprCreate(3, 10, "Piece linear")
  542.     
  543.     ShowDataVals dwFunc, N, vaDots
  544.     ShowResults
  545.     
  546.     FindGraph.FuncApprEnd
  547.  
  548.     Exit Sub
  549. ErrHandler:
  550.     LogError
  551.     Exit Sub
  552. End Sub
  553.  
  554.  
  555. ' It may be very SLOW
  556. Private Sub Neural_Click()
  557.     On Error GoTo ErrHandler
  558.     Dim dwDots, dwFunc, it, N As Long
  559.     Dim nIdFunc As Long
  560.     Dim fX, fY, fZ As Double
  561.     
  562.     N = 20
  563.     Dim vaDots(60) As Variant
  564.     
  565.     ' Create new series of points
  566.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "Neural")
  567.     ' Set the identifier of a series
  568.     FindGraph.ArrayId = dwDots
  569.     ' Fill array with points
  570.     For i = 1 To N
  571.         fX = CDbl(8# / N * i)
  572.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  573.         fZ = CDbl(i)
  574.         it = (i - 1) * 3
  575.         vaDots(it) = fX
  576.         vaDots(it + 1) = fY
  577.         vaDots(it + 2) = fZ
  578.     Next i
  579.  
  580.     ' Add all array at once
  581.     FindGraph.ArrayVar = vaDots
  582.     
  583.     ' Approximation
  584.     nIdFunc = 70 'Neural network approximation
  585.     Dim vaParams(10) As Variant ' parameters for automation approximation
  586.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  587.     vaParams(1) = CDbl(8) ' Number of neurons
  588.     vaParams(2) = CDbl(4) ' Parameter A
  589.     vaParams(3) = CDbl(0.0001) ' Step
  590.     vaParams(4) = CDbl(1000) ' Maximum number of iterations
  591.     
  592.     FindGraph.FuncApprStart (nIdFunc)
  593.     FindGraph.ArrayVar = vaDots
  594.     FindGraph.ArrayParams = vaParams
  595.     dwFunc = FindGraph.FuncApprCreate(4, 10, "Neural")
  596.     
  597.     ShowDataVals dwFunc, N, vaDots
  598.     ShowResults
  599.     
  600.     FindGraph.FuncApprEnd
  601.  
  602.     Exit Sub
  603. ErrHandler:
  604.     LogError
  605.     Exit Sub
  606. End Sub
  607.  
  608.  
  609. Private Sub Nonlinear_Click()
  610.     On Error GoTo ErrHandler
  611.     Dim dwDots, dwFunc, it, N As Long
  612.     Dim nIdFunc As Long
  613.     Dim fX, fY, fZ As Double
  614.     
  615.     N = 20
  616.     Dim vaDots(60) As Variant
  617.     
  618.     ' Create new series of points
  619.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "Nonlinear")
  620.     ' Set the identifier of a series
  621.     FindGraph.ArrayId = dwDots
  622.     ' Fill array with points
  623.     For i = 1 To N
  624.         fX = CDbl(8# / N * i)
  625.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  626.         fZ = CDbl(i)
  627.         it = (i - 1) * 3
  628.         vaDots(it) = fX
  629.         vaDots(it + 1) = fY
  630.         vaDots(it + 2) = fZ
  631.     Next i
  632.  
  633.     ' Add all array at once
  634.     FindGraph.ArrayVar = vaDots
  635.     
  636.     ' Approximation
  637.     nIdFunc = 88 ' Non-linear (predefined function)
  638.     Dim vaParams(20) As Variant ' parameters for automation approximation
  639.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  640.     vaParams(1) = CDbl(1) ' Unused, must be > 0
  641.     vaParams(2) = CDbl(1060) ' Fitting curve Equation, parabola+sqrt for example
  642.     vaParams(3) = CDbl(1000) ' Fitting Model, polynomial for example
  643.     vaParams(4) = CDbl(0.0001) ' Step
  644.     vaParams(5) = CDbl(1000) ' Number of Iterations
  645.     vaParams(6) = CDbl(0) ' Model, 0 - Simplex, 1 - Gradient
  646.     vaParams(7) = CDbl(0) ' If > 0 - Normalize X
  647.  
  648.     vaParams(8) = CDbl(0) ' Initial value of parameter A
  649.     vaParams(9) = CDbl(0.5) ' Initial value of parameter B
  650.     vaParams(10) = CDbl(0.5) ' Initial value of parameter C
  651.     vaParams(11) = CDbl(0) ' Initial value of parameter D
  652.     vaParams(12) = CDbl(0) ' Initial value of parameter G
  653.     vaParams(13) = CDbl(0) ' If > 0 Fixed parameter A
  654.     vaParams(14) = CDbl(0) ' If > 0 Fixed parameter B
  655.     vaParams(15) = CDbl(0) ' If > 0 Fixed parameter C
  656.     vaParams(16) = CDbl(0) ' If > 0 Fixed parameter D
  657.     
  658.     'Uncomment it to set your own formula
  659.     'Pay attention, the calculation may be VERY SLOW
  660.     'nIdFunc = 90 ' Non-linear (formula)
  661.     'FindGraph.FuncApprString = "a+b*u+c*u*u+d*sin(u)"
  662.     
  663.     FindGraph.FuncApprStart (nIdFunc)
  664.     FindGraph.ArrayVar = vaDots
  665.     FindGraph.ArrayParams = vaParams
  666.     dwFunc = FindGraph.FuncApprCreate(4, 10, "Nonlinear")
  667.     
  668.     ShowDataVals dwFunc, N, vaDots
  669.     ShowResults
  670.     
  671.     FindGraph.FuncApprEnd
  672.  
  673.     Exit Sub
  674. ErrHandler:
  675.     LogError
  676.     Exit Sub
  677.  
  678. End Sub
  679.  
  680.  
  681. Private Sub Regression_Click()
  682.     On Error GoTo ErrHandler
  683.     Dim dwDots, dwFunc, it, N As Long
  684.     Dim nIdFunc As Long
  685.     Dim fX, fY, fZ As Double
  686.     
  687.     N = 20
  688.     Dim vaDots(60) As Variant
  689.     
  690.     ' Create new series of points
  691.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "Regression")
  692.     ' Set the identifier of a series
  693.     FindGraph.ArrayId = dwDots
  694.     ' Fill array with points
  695.     For i = 1 To N
  696.         fX = CDbl(8# / N * i)
  697.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  698.         fZ = CDbl(i)
  699.         it = (i - 1) * 3
  700.         vaDots(it) = fX
  701.         vaDots(it + 1) = fY
  702.         vaDots(it + 2) = fZ
  703.     Next i
  704.  
  705.     ' Add all array at once
  706.     FindGraph.ArrayVar = vaDots
  707.     
  708.     ' Approximation
  709.     nIdFunc = 10 ' Linear Regression
  710.     NParams = 72
  711.     Dim vaParams(73) As Variant ' parameters for automation approximation
  712.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  713.     vaParams(1) = CDbl(1) ' Unused, must be > 0
  714.     For i = 2 To NParams
  715.         vaParams(i) = CDbl(0)
  716.     Next i
  717.         
  718.     ' Polynomial
  719.     N1 = 2 'V(U) = V0 + a11*(U-U1)/W1 + a12*((U-U1)/W1)^2 + ...
  720.      vaParams(N1 + 0) = CDbl(0) ' U1
  721.      vaParams(N1 + 1) = CDbl(1) ' W1
  722.      vaParams(N1 + 2) = CDbl(1) ' If > 0 use V0 (const)
  723.      vaParams(N1 + 3) = CDbl(1) ' If > 0 use a11*U
  724.      vaParams(N1 + 4) = CDbl(1) ' If > 0 use a12*U^2
  725.      vaParams(N1 + 5) = CDbl(1) ' If > 0 use a13*U^3
  726.      vaParams(N1 + 6) = CDbl(1) ' If > 0 use a14*U^4
  727.         
  728.     N2 = 12 'V(U) =... + a21*W2/(U-U2) + a22*(W2/(U-U2))^2 + ...
  729.      vaParams(N2 + 0) = CDbl(0) ' U2
  730.      vaParams(N2 + 1) = CDbl(1) ' W2
  731.      vaParams(N2 + 3) = CDbl(1) ' If > 0 use a21*W2/(U-U2)
  732.     N3 = 22 'V(U) =... + a31*sqr((U-U3)/W3) + a32/sqr((U-U3)/W3) + ...
  733.     N4 = 32 'V(U) =... + a41*ln (U-U4)/W4 + a42* (ln((U-U4)/W4)^2 + ...
  734.     N5 = 42 'V(U) =... + a51*exp(U-U5)/W5 + a52* exp(2*(U-U5)/W5) + ...
  735.     N6 = 52 'V(U) =... + a61*sin(U-U6)/W6 + a62* sin(2*(U-U6)/W6) + ...
  736.     N7 = 62 'V(U) =... + a71*cos(U-U6)/W6 + a72* cos(2*(U-U7)/W6) + ...
  737.         
  738.         
  739.         
  740.     FindGraph.FuncApprStart (nIdFunc)
  741.     FindGraph.ArrayVar = vaDots
  742.     FindGraph.ArrayParams = vaParams
  743.     dwFunc = FindGraph.FuncApprCreate(4, 10, "Regression")
  744.     
  745.     ShowDataVals dwFunc, N, vaDots
  746.     ShowResults
  747.     
  748.     FindGraph.FuncApprEnd
  749.  
  750.     Exit Sub
  751. ErrHandler:
  752.     LogError
  753.     Exit Sub
  754. End Sub
  755.  
  756. Private Sub User_Click()
  757.     On Error GoTo ErrHandler
  758.     Dim dwDots, dwFunc, it, N As Long
  759.     Dim nIdFunc As Long
  760.     Dim fX, fY, fZ As Double
  761.     
  762.     N = 20
  763.     Dim vaDots(60) As Variant
  764.     
  765.     ' Create new series of points
  766.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "User DLL")
  767.     ' Set the identifier of a series
  768.     FindGraph.ArrayId = dwDots
  769.     ' Fill array with points
  770.     For i = 1 To N
  771.         fX = CDbl(8# / N * i)
  772.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  773.         fZ = CDbl(i)
  774.         it = (i - 1) * 3
  775.         vaDots(it) = fX
  776.         vaDots(it + 1) = fY
  777.         vaDots(it + 2) = fZ
  778.     Next i
  779.  
  780.     ' Add all array at once
  781.     FindGraph.ArrayVar = vaDots
  782.     
  783.     ' Approximation
  784.     nIdFunc = 80 ' User defined Plug-In DLL
  785.     Dim vaParams(20) As Variant ' parameters for automation approximation
  786.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  787.     vaParams(1) = CDbl(1) ' Unused, must be > 0
  788.     vaParams(2) = CDbl(0) ' Parameter 1
  789.     vaParams(3) = CDbl(1) ' Parameter 2
  790.     vaParams(4) = CDbl(0) ' Parameter 3
  791.     vaParams(5) = CDbl(0) ' Parameter 4
  792.  
  793.     FindGraph.FuncApprStart (nIdFunc)
  794.     FindGraph.ArrayVar = vaDots
  795.     FindGraph.ArrayParams = vaParams
  796.     FindGraph.FuncApprString = "fit_exp.dll"
  797.     dwFunc = FindGraph.FuncApprCreate(5, 10, "User DLL")
  798.     
  799.     ShowDataVals dwFunc, N, vaDots
  800.     ShowResults
  801.     
  802.     FindGraph.FuncApprEnd
  803.  
  804.     Exit Sub
  805. ErrHandler:
  806.     LogError
  807.     Exit Sub
  808.  
  809. End Sub
  810.  
  811. Private Sub BSpline_Click()
  812.     On Error GoTo ErrHandler
  813.     Dim dwDots, dwFunc, it, N As Long
  814.     Dim nIdFunc As Long
  815.     Dim fX, fY, fZ As Double
  816.     
  817.     N = 20
  818.     Dim vaDots(60) As Variant
  819.     
  820.     ' Create new series of points
  821.     dwDots = FindGraph.DotsNew(4, 2, 20, 1, "User DLL")
  822.     ' Set the identifier of a series
  823.     FindGraph.ArrayId = dwDots
  824.     ' Fill array with points
  825.     For i = 1 To N
  826.         fX = CDbl(8# / N * i)
  827.         fY = CDbl(1# + 4 * Sin(2 / N * i - 0.3))
  828.         fZ = CDbl(i)
  829.         it = (i - 1) * 3
  830.         vaDots(it) = fX
  831.         vaDots(it + 1) = fY
  832.         vaDots(it + 2) = fZ
  833.     Next i
  834.  
  835.     ' Add all array at once
  836.     FindGraph.ArrayVar = vaDots
  837.     
  838.     ' Approximation
  839.     nIdFunc = 32 '  B-spline
  840.     Dim vaParams(20) As Variant ' parameters for automation approximation
  841.     vaParams(0) = CDbl(0) ' 0 - y=f(x), 1 - x=f(y)
  842.     vaParams(1) = CDbl(1) ' Unused, must be > 0
  843.     vaParams(2) = CDbl(0) ' Unused
  844.     vaParams(3) = CDbl(0) ' 0 - approximation, 1 - interpolation
  845.     vaParams(4) = CDbl(0) ' 1 - closed curve
  846.     vaParams(5) = CDbl(12) ' number of control points: 1-12
  847.     vaParams(6) = CDbl(3) ' Degree: 1-6
  848.  
  849.     FindGraph.FuncApprStart (nIdFunc)
  850.     FindGraph.ArrayVar = vaDots
  851.     FindGraph.ArrayParams = vaParams
  852.     FindGraph.FuncApprString = "fit_exp.dll"
  853.     dwFunc = FindGraph.FuncApprCreate(5, 10, "B-Spline")
  854.     
  855.     ShowDataVals dwFunc, N, vaDots
  856.     ShowResults
  857.     
  858.     FindGraph.FuncApprEnd
  859.  
  860.     Exit Sub
  861. ErrHandler:
  862.     LogError
  863.     Exit Sub
  864.  
  865.  
  866. End Sub
  867.  
  868.  
  869.